import json

XIAFANG = """你非常细心，通过仔细给定观察序列数据电流变化，尽可能正确返回三个值。
例如：
电流变化序列数据：
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 56.6478, 56.5133, 60.8637, 56.3751, 56.3777, 56.3601, 61.1564, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 422.499, 56.2896, 66.3951, 60.8928, 57.7813, 56.3871, 66.3077, 62.5263, 56.3937, 58.0826, 90.0969, 87.5592, 83.9934, 56.5033, 59.3441, 58.0018, 56.3027, 56.2845, 56.3666, 101.763, 96.6118, 56.3492, 59.2629, 57.0112, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]
在这里面寻找三个值返回结果：
[90.0969,56.5033,101.763]
返回依据解释：
第一个值为 最后一段非零数据的第一次达到峰值，同时满足必须为80以上；
第二个值为 要小于60，峰值回落至小于60的值,并且要在第二个值后面，在第三个值前面；
第三个值为 重新达到峰值，同时满足必须为90以上。
三个值均不考虑大于200异常数据


现有一组新的电流变化序列数据：
<<L>>
请参照样例和解释依据，新的电流变化序列数据可能会有一些噪声，你自己仔细思考判断，思考完成后，不需要返回思考过程，以列表形式返回三个值,回答中只有列表。。"""

HUISHOU = """你非常细心，通过仔细给定观察序列数据电流变化，尽可能正确返回三个值。
例如：
电流变化序列数据：
[0.0, 0.0, 0.0, 0.0, 0.0, 57.0048, 56.8545, 61.9802, 56.8646, 56.8705, 56.777, 68.3751, 56.5526, 56.6556, 63.1736, 68.4542, 78.2151, 86.3214, 82.7017, 58.9111, 56.632, 56.9142, 56.6583, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 56.2542, 56.2177, 56.1263, 56.2697, 56.102, 59.5568, 57.5703, 57.6415, 56.9307, 57.0531, 56.9337, 58.582, 58.0159, 104.238, 96.6301, 97.1496, 56.5543, 63.426, 57.6552, 56.6086, 56.6611, 56.5601, 56.6476, 56.68, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]
在这里面寻找三个值返回结果：
[86.3214,104.238,56.5543]
返回依据解释：
第一个值为 非最后一段非零数据的峰值，同时满足必须为80以上；
第二个值为后面一段非零数据的峰值，一般要为90以上；
第三个值 要小于60，峰值回落至小于60的值,并且要在第二个值后面。
三个值均不考虑大于200异常数据


现有一组新的电流变化序列数据：
<<L>>
请参照样例和解释依据，新的电流变化序列数据可能会有一些噪声，你自己仔细思考判断，思考完成后，不需要返回思考过程，以列表形式返回三个值,,回答中只有列表。。"""


def predict_sequence_by_llm(L_sequence, oper):
    from ai_brain import create_chat_completion

    if oper == 0:  #
        context_text = XIAFANG  # 直接读取为字符串
    else:
        context_text = HUISHOU
    prompt = context_text.replace("<<L>>", L_sequence)
    print(prompt)
    messages = [{"role": "user", "content": prompt}]
    response = create_chat_completion(messages)
    return str(response.choices[0].message.content)


def get_result(L_sequence, oper):
    try:
        # 第一次尝试
        input_string = predict_sequence_by_llm(L_sequence=L_sequence, oper=oper)
        print(input_string)
        result_list = json.loads(input_string)

        if len(result_list) == 3:
            a = result_list[0]
            b = result_list[1]
            c = result_list[2]
            return a, b, c
    except:
        # 第一次失败，进行第二次尝试
        try:
            input_string = predict_sequence_by_llm(L_sequence=L_sequence)
            result_list = json.loads(input_string)
            if len(result_list) == 3:
                a = result_list[0]
                b = result_list[1]
                c = result_list[2]
                return a, b, c
        except:
            # 第二次也失败，返回 -100, -100, -100
            return -100, -100, -100


if __name__ == "__main__":
    # 8月23日
    L_sequence = """[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 455.677, 56.8904, 56.5002, 56.5263, 60.3616, 56.5352, 56.5815, 61.2809, 56.6051, 56.637, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 56.3774, 56.3945, 60.1437, 56.3718, 56.3303, 57.0767, 62.5424, 56.5986, 56.8304, 91.4412, 85.2003, 84.8317, 57.6615, 56.5487, 65.923, 56.514, 111.993, 100.397, 96.7767, 65.5871, 56.3729, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]"""
    # 8月24日
    L_sequence = """[0.0, 0.0, 0.0, 0.0, 57.2881, 56.8419, 56.5077, 56.6426, 57.7256, 56.8412, 56.6808, 56.5717, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 58.1845, 56.5284, 63.8679, 56.453, 57.0068, 62.5391, 56.5113, 58.1833, 92.0864, 89.2582, 83.3406, 82.0093, 90.2556, 61.1712, 56.3972, 56.5383, 102.118, 57.7956, 57.7075, 56.3714, 94.4528, 72.3336, 58.8865, 56.3566, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0]"""

    a, b, c = get_result(L_sequence, 0)  # 下放阶段是0 回收阶段是1
    print(a, b, c)
